<?php

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//
// The spDateTime has following formats:
//
//	date: dd-mm-yyyy
//	time: hh:mm:ss
//
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

class spDateTime
{
	private $dd;
	private $mm;
	private $yyyy;
	
	private $h;
	private $m;
	private $s;

	///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	//
	//	$param
	//
	//		null			: current date and time
	//		"dd-mm-yyyy"
	//		"dd/mm"
	//
	///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

	public function __construct( $param=null )
	{
		if ( $param==null )
		{
			$date = date( 'd-m-Y', time() );
			list( $this->dd, $this->mm, $this->yyyy ) = explode( "-", $date );
			
			$time = date( 'H:i:s', time() );
			list( $this->h, $this->m, $this->s ) = explode( ":", $time );
		}
		
		if ( isset($param["dd-mm-yyyy"]) )
		{
			list( $this->dd, $this->mm, $this->yyyy ) = explode( "-", $param["dd-mm-yyyy"] );
		}
		
		if ( isset($param["dd/mm"]) )
		{
			list( $this->dd, $this->mm ) = explode( "/", $param["dd/mm"] );
		}

	}
	
	public function get( $format="dd-mm-yyyy" )
	{
		$format = str_replace( "dd", $this->dd, $format );
		$format = str_replace( "mm", $this->mm, $format );
		$format = str_replace( "yyyy", $this->yyyy, $format );
		return $format;
	}
	
	///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	//
	// calcDaysDiff
	//
	// 	input types:
	//
	//		$date : spDateTime
	//
	//	returns:
	//
	//		Numbers of days difference from (this-$date)
	//
	///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

	public function calcDaysDiff( $date, $ignoreYears=false )
	{
		if ( $ignoreYears )
		{
			// we only use the days and months
			$d1 = strtotime( "2000".$this->get("-mm-dd") );	// must be in yyyy-dd-mm
			$d2 = strtotime( "2000".$date->get("-mm-dd") );	// must be in yyyy-dd-mm
		}
		else
		{
			$d1 = strtotime( $this->get("yyyy-mm-dd") );	// must be in yyyy-dd-mm
			$d2 = strtotime( $date->get("yyyy-mm-dd") );	// must be in yyyy-dd-mm
		}
		
		$diff = $d2 - $d1;
		return floor($diff/(60*60*24));
	}

	///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	//
	//	calcDateRange( $dateStart, $dateEnd );
	//	
	//
	//	returns
	//
	//		array of dates between $dateStart - $dateEnd (including both given dates)
	//
	///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	
	static public function calcDateRange( $dateStart, $dateEnd )
	{
	}

	///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	//
	///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	
	static public function calcAge( $date )
	{
		if ( $date=="" )
			return 0;
			
		if ( substr_count( $date, "-" )!=2 )
			return 0;
	
		list($day,$month,$year) = explode( "-", $date );
		$year_diff  = date("Y") - $year;
		$month_diff = date("m") - $month;
		$day_diff   = date("d") - $day;
		if ($month_diff < 0) $year_diff--;
		elseif (($month_diff==0) && ($day_diff < 0)) $year_diff--;
		return $year_diff;
	}

}

?>